Los accidentes viales representan un serio problema de salud pública, en un estudio realizado por la OMS en conjunto con el Banco Mundial, aparecen como la séptima causa de morbilidad en el planeta, las cifras muestran que en el mundo, más de 1.25 millones de personas fallece cada año en las vías y además generan un alto costo para las naciones.
Los accidente de transito se originan por condiciones del vehículo (factor mecánico), ambientales (factor climático) y en gran medida por factores humanos.
Se ha identificado que el factor humano está relacionado a más del 90% de los accidentes de tránsito. Las percepciones de la población sobre la causalidad de éstos, refleja que son debido a la irresponsabilidad de los conductores donde el alcohol, falta de respeto por las señales de tránsito, exceso de velocidad, uso de móviles, entre otros, son factores que desencadenan los accidentes; por otro lado, los peatones también son percibidos como responsables.
Hay varias formas de enfrentar dicha problemática, por ejemplo los programas de educación y respeto por las normas de tránsito y la disposición de la tecnología para el mejoramiento preventivo no sólo a partir de la mejora de los vehículos, sino también, del aprovechamiento de los grandes conjuntos de datos que proveen los datos abiertos, con el fin de estimular decisiones más oportunas e informadas.
La alta accidentalidad en Medellín se ha convertido en un problema de salud pública, por ejemplo, en 2017 y 2018 murieron 254 y 314 personas respectivamente por incidentes de tránsito, además continúa en la cabeza de las ciudades con más accidentes de tránsito en el país, a pesar de la reducción de las cifras en los últimos tres años, lo que significa que se deben reforzar las acciones que se están realizando en esta materia. En Medellín se ha aumentado la señalización, la contratación con la agencia nacional de seguridad vial, medidores de velocidad, pero se siguen presentados accidentes, en mayor cantidad por motociclistas y peatones. En el caso de los peatones se evidencia que más de la mitad de los sucesos se ve involucrado un motoclista por atropello. En estudios previos por la secretaria de tránsito, se señala que muchos de los accidentes se presentan en barrios residenciales y se atribuye a que los motociclistas no utilizan la indumentaria adecuada para la prevención de estos accidentes. Esta problemática también afecta la calidad del aire de la ciudad, por cada incidente se congestionan las vías por una hora aproximadamente, lo cual genera mayor carburación de los vehículos que se encuentran allí, causando altas emisiones de dióxido de carbono que a su vez generan más contaminación ambiental.
Crear un modelo que permita predecir la accidentalidad en Medellín por tipo de accidente a nivel diario, semanal y mensual.
Realizar un agrupamiento de los barrios de Medellín de acuerdo a su accidentalidad.
Crear un aplicación web que permita a los usuarios finales visualizar los datos históricos y hallazgos de valor en los datos, calcular prediciones de los accidentes diarios, semanales y mensuales y finalmente que permita visualizar en un mapa una agrupación de los barrios de Medellín de acuerdo a su accidentalidad.
Los datos se obtuvieron de la página de Open Data de la alcaldía de Medellín: [https://geomedellin-m-medellin.opendata.arcgis.com/]. Se usaran los datos de los años 2014, 2015, 2016, 2017 para el entrenamiento y 2018 para la validación de los modelos propuestos. Para cada año se tiene la siguiente información:
En el análisis descriptivo y exploratorio de los datos se realizaron gráficos que permiten observar el comportamiento de las variables y posibles relaciones entre éstas.
Se leen los datos
D2014<-read.csv("Accidentalidad_georreferenciada_2014.csv")
D2015<-read.csv("Accidentalidad_georreferenciada_2015.csv")
D2016<-read.csv("Accidentalidad_georreferenciada_2016.csv")
D2017<-read.csv("Accidentalidad_georreferenciada_2017.csv")
D2018<-read.csv("Accidentalidad_georreferenciada_2018.csv")
d<-rbind(D2014,D2015,D2016,D2017,D2018)
head(d)
## ï..X Y OBJECTID RADICADO FECHA HORA DIA
## 1 -75.60273 6.219016 211279 1423828 2014/01/01 00:00:00+00 02:20:00 1
## 2 -75.56818 6.260009 211280 1423839 2014/01/01 00:00:00+00 12:50:00 1
## 3 -75.54994 6.264765 211281 1423840 2014/01/01 00:00:00+00 01:00:00 1
## 4 -75.60761 6.234327 211282 1423849 2014/01/01 00:00:00+00 12:37:00 1
## 5 -75.57969 6.299968 211283 1423890 2014/01/01 00:00:00+00 10:40:00 1
## 6 -75.55543 6.284499 211284 1423892 2014/01/01 00:00:00+00 04:00:00 1
## PERIODO CLASE DIRECCION DIRECCION_ENC CBML
## 1 2014 Choque CR 80 CL 8 CR 080 008 000 00000 1611
## 2 2014 Atropello CR 53 CL 61 CR 053 061 000 00000 1003
## 3 2014 Atropello CR 39 CL 70 CR 039 070 000 00000 0308
## 4 2014 Atropello CL 32 CR 84 CL 032 084 000 00000 1617
## 5 2014 CaÃda de Ocupante CR 80 CL 101 CR 080 101 000 00000 0603
## 6 2014 Choque CR 48 CL 93 CR 048 093 000 00000 0401
## TIPO_GEOCOD GRAVEDAD BARRIO COMUNA
## 1 Malla vial aproximada: CR 81-7 HERIDO Loma de los Bernal Belén
## 2 Malla vial HERIDO Jesús Nazareno La Candelaria
## 3 Malla vial HERIDO Manrique Oriental Manrique
## 4 Malla vial HERIDO Las Mercedes Belén
## 5 Malla vial HERIDO Doce de Octubre No.2 Doce de Octubre
## 6 Malla vial HERIDO Berlin Aranjuez
## DISENO DIA_NOMBRE MES MES_NOMBRE X_MAGNAMED Y_MAGNAMED LONGITUD
## 1 Tramo de via MIÉRCOLES 1 NA 831190.1 1179690 -75.60273
## 2 Tramo de via MIÉRCOLES 1 NA 835013.6 1184224 -75.56818
## 3 Tramo de via MIÉRCOLES 1 NA 837032.7 1184750 -75.54994
## 4 Tramo de via MIÉRCOLES 1 NA 830649.5 1181383 -75.60761
## 5 Tramo de via MIÉRCOLES 1 NA 833740.8 1188644 -75.57969
## 6 Interseccion MIÉRCOLES 1 NA 836425.4 1186933 -75.55543
## LATITUD
## 1 6.219016
## 2 6.260009
## 3 6.264765
## 4 6.234327
## 5 6.299968
## 6 6.284499
Se consolida la información en una sóla base de datos y se realizan cambios de formatos, se agrega la variable cantidad que indica la cantidad o número de accidentes. Además se realiza homologación a la variable clase (los incendios y N/A se agregan a la clase Otro), se obtienen 5 clases:
Se observa que el número de accidentes por año es casi constante, sin embargo en el año 2018 disminuyeron en un 6% respecto a 2017.
## Warning: `arrange_()` is deprecated as of dplyr 0.7.0.
## Please use `arrange()` instead.
## See vignette('programming') for more help
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
A partir de ésta gráfica se observa que en los meses de marzo, mayo y agosto en la mayoría de años se presentan picos de accidentalidad y tiende a haber diminuciones en los meses de enero, abril, junio y noviembre. Siendo enero el mes con menor número de casos. En el 2016 se observan varios picos que no se presentaron en los otros años.
##
## Atropello Caida Ocupante Choque Otro Volcamiento
## 9.711710 9.233339 66.655298 11.023075 3.376579
Se puede notar que el tipo de accidente más frecuente es el choque con un total de 152436 casos representado un 67% de los casos.
Se observa que el día en el que ocurren mas accidentes es el viernes seguido del martes, el día con menos accidentes es el domingo y la clase que domina en todo los días es el choque.
##
## HERIDO MUERTO SOLO DAÑOS
## 55.1927693 0.6008054 44.2064252
En el periodo de tiempo estudiado (2014-2018), la gravedad del accidente más frecuente es herido con 126222 casos (55%), seguido de sólo daños con 101097 (44%) y muerto con 1374 (0.6%).
En la clase choque predomina la gravedad del accidente en el que hay sólo daños y los heridos, en el resto de clases predominan los heridos.Es de resaltar que los muertos en la clase de accidente atropello representan un 3%.
Se observa que en todas las clases predominan los accidentes en tramos de vía seguido de las intersecciones.
El objetivo es clasificar los barrios por su accidentalidad, para esto se un hizo un modelo de Clusterización K-means. Las variables que se consideraron para construir la segmentación fueron, el día de la semana y el mes donde se presenta el suceso, la clase de accidente, la gravedad del accidente, el diseño de la vía y por último la comuna. Después de realizar las debidas validaciones de esta segmentación se decidió tomar un total de 5 clúster donde se verán reflejadas las características de cada uno de los K-Cluster.
Del siguiente gráfico se puede observar que el numero de clusters adecuado es 5.
Este gráfico muestra la distribución de los barrios por cluster.
Después de ejecutar el agrupamiento con los 5 cluster se obtiene que el grupo 1 está conformado por los barrios de menor accidentalidad, seguido por el grupo 3, el grupo 5, el grupo 2 y finalmente el 4 que está conformado por los barrios con mas casos de accidentes.
Esta basada en un modelo predictivo bajo la metodología de Random Forest, el cual presenta un MSE más favorable en comparación a las otras metodologías de prueba como lo fueron SMV, Redes neuronales y un modelo GLM (poisson). El modelo se entrenó con los años de accidentabilidad de 2014 a 2017, tomando las variables de clase de accidente, día de la semana, mes del accidente, diseño de la via y se agregó la variable de fechas especiales. Al final se elige el modelo con menor MSE de 19.3, lo que quiere decir que se está equivocando en promedio en 19 accidentes.
La variable fecha especial se creó como una variable indicadora donde es 1 si es una fecha especial (si ocurre alguno de estos eventos: Festivo, Semana Santa, Día de la Madre, Día del Padre, Feria de Flores, Amor y Amistad, Hallowen, Quincena, Alborada, Velitas, Navidad y Fin de Año) y 0 si no es fecha especial.
Random Forest
Se obtiene un MSE de 19.6
#####modelo1
set.seed(88)
modelo1<-randomForest(conteo~.,data =entrenamientofin)
entrenamientomod$MES<-as.factor(entrenamientomod$MES)
prediccion1<-predict(modelo1,validacion)
resultados1<-data.frame(validacion,prediccion1,2018)
names(resultados1)[9] = "PERIODO"
resultados1$MES_NUMERO<-case_when( resultados1$MES=="ENERO" ~ "1",
resultados1$MES=="FEBRERO" ~ "2",
resultados1$MES=="MARZO" ~ "3",
resultados1$MES=="ABRIL" ~ "4",
resultados1$MES=="MAYO" ~ "5",
resultados1$MES=="JUNIO" ~ "6",
resultados1$MES=="JULIO" ~ "7",
resultados1$MES=="AGOSTO" ~ "8",
resultados1$MES=="SEPTIEMBRE" ~ "9",
resultados1$MES=="OCTUBRE" ~ "10",
resultados1$MES=="NOVIEMBRE" ~ "11",
resultados1$MES=="DICIEMBRE" ~ "12",
TRUE ~ "raro")
prubmse<-((resultados1$conteo)-(resultados1$prediccion1))^2
prubmse<-as.vector(prubmse)
mean(prubmse)
## [1] 19.61147
SVM
Se obtiene un MSE de 194.29
#######modelo2
modelo2<-svm(conteo~.,data =entrenamientofin,kernel="linear",cost=10,scale = FALSE)
prediccion2<-predict(modelo2,validacion)
resultados2<-data.frame(validacion,prediccion2)
prubmse2<-((resultados2$prediccion2)-(resultados2$conteo))^2
prubmse2<-as.vector(prubmse2)
mean(prubmse2)
## [1] 194.2908
glm
Se obtiene un MSE de 134.89
########modelo3
modelo3<-glm(conteo~.,data =entrenamientofin)
prediccion3<-predict(modelo3,validacion)
resultados3<-data.frame(validacion,prediccion3)
prubmse3<-((resultados3$prediccion3)-(resultados3$conteo))^2
prubmse3<-as.vector(prubmse3)
mean(prubmse3)
## [1] 134.8922
Red neuronal
Se usó una red neuronal con 5 capas y cada capa con 5 neuronas con la función de activación rectifier.
Se obtiene un MSE de 40.3
########modelo4
#h2o.init(nthreads = -1)
#classifier = h2o.deeplearning(y = 'conteo',
#training_frame = as.h2o(entrenamientofin),
#activation = 'Rectifier',
#hidden = c(5, 5),
#epochs = 100,
#train_samples_per_iteration = -2)
#modelo4<-neuralnet(conteo~.,data =entrenamientofin)
#prob_pred <- h2o.predict(classifier, newdata = as.h2o(validacion))
#prueba1<-as.data.frame(prob_pred)
#resultados4<-data.frame(validacion,prueba1$predict)
#prubmse4<-((resultados4$prueba1.predict)-(resultados4$conteo))^2
#prubmse4<-as.vector(prubmse4)
#mean(prubmse4)